package com.lianqi.emcpframework.utils;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringJoiner;

/**
 * @program emcp-framework
 * @ClassName AssembleTools
 * @description: 装配工具类
 * @author: sky
 * @create: 2018/11/17 20:05
 */
public class AssembleTools {


    /**
     * 组装方法定义
     * @param methodName 方法名
     * @param paramNames 参数名称数组
     * @param paramTypes 参数类型数组
     * @return 方法定义字符串
     */
    public static String assembleMethodDefinition(String methodName, String[] paramNames,Class[] paramTypes){
        StringJoiner methodAppender = new StringJoiner(",",methodName.concat("("),")");
        for (int i = 0; i < paramTypes.length; i ++){
            methodAppender.add(paramTypes[i].getSimpleName().concat(" ")
                    .concat(paramNames.length > i ? paramNames[i] : "arg" + i));
        }
        return methodAppender.toString();
    }

    /**
     * 组装方法请求参数映射 key参数名 value 参数值
     * @param argNames 参数名数组
     * @param args 参数值数组
     * @return LinkedHashMap 请求参数映射
     */
    public static Map<String,Object> assembleMethodArgMapper(String[] argNames, Object[] args){
        Map<String,Object> argMap = new LinkedHashMap<>();
        for (int i = 0; i < argNames.length; i ++){
            String argName = argNames == null || argNames[i] == null ? "arg"+i : argNames[i];
            argMap.put(argName,args[i]);
        }
        return argMap;
    }
}
